#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<windows.h>
//全局变量

int high,width;//画面尺寸
int bird_x,bird_y;//小鸟位置
int bar_y,bar_xDown,bar_xTop;//障碍物坐标
int score;

void gotoxy(int x,int y)//光标移动到(x,y)位置
{
    HANDLE handle=GetStdHandle(STD_OUTPUT_HANDLE);
    COORD pos;
    pos.X=x;
    pos.Y=y;
    SetConsoleCursorPosition(handle,pos);
}

void HideCursor()
{
    CONSOLE_CURSOR_INFO cursor_info = {1, 0};
    SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);
}

void startup()//数据初始化
{
   high =15;
   width =25;
   bird_x=0;
   bird_y=width/3;

   bar_y=width;
   bar_xTop=high/4;
   bar_xDown=high/2+1;
   score =0;

   HideCursor();//隐藏光标

}

void show()  //显示画面
{
    gotoxy(0,0);//光标移动到原点位置，以下重画清屏
    int i,j;

    for(i=0;i<=high+1;i++)
    {
        for(j=0;j<=width;j++)
        {
            if((i==bird_x)&&(j==bird_y))
                printf("@");//输出小鸟@
            else if((j==bar_y)&&((i<=bar_xTop)||(i>=bar_xDown)))
                printf("*");//输出障碍物*
            else
                printf(" ");//输出空格
        }
        printf("\n");
    }
    printf("得分：%d",score);
}
void updateWithoutInput()//与输入无关的更新
{
    if(bird_y==bar_y)
    {
        if((bird_x>bar_xTop)&&(bird_x<bar_xDown))
            score++;
        else
            exit(0);
    }

    bird_x++;

    if(bar_y>0)
    bar_y--;
    else
    {
        bar_y=width;

        int randPosition = rand()%(high-5);
        bar_xTop=randPosition;
        bar_xDown=randPosition+high/4;
    }
    Sleep(150);
}
void updateWithInput()//与输入有关的更新
{
    char input;

    if(kbhit())//当按键时执行
    {
        input = getch();

        if(input==' '){
            bird_x=bird_x-2;
            }

    }
}


int main()
{
    startup();//数据初始化
    while(1) //游戏循环执行
    {
        show();  //显示画面
        updateWithoutInput();//与输入无关
        updateWithInput();//与输入有关
    }


    return 0;
}
